#pragma once

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include "Table.h"

class Database // 数据库类
{
    public:

    std::string name;           // 数据库名称，就是文件名
    int table_count;            // 数据表个数
    std::vector<Table> tables;  // 含有的数据表

    // 所有在main函数中要用到的函数都被封装到了这里
    // 另外5个文件的内容无需关心

    // 构造函数，在use xxx时调用，创建一个数据库对象作为默认数据库
    // 根据传入的文件名来读取和初始化数据库的所有内容
    // 如传入："admin_database"，不用加后缀，会载入该目录下“admin_database.sdb“文件
    // Database *db = new Database("admin_database");
    Database(std::string file_name);
    
    //~Database();

    void write_back();

    // 打印数据库信息
    void info();

    // 打印数据表信息
    // db->table_info("user");
    void table_info(std::string table_name);

    // 创建数据表
    // db->create_table("user", "string id, string name, float math, float cs, float english");
    void create_table(std::string table_name, std::string fields_set);

    // 删除数据表
    // db->drop_table("user");
    void drop_table(std::string table_name);

    // 插入记录到一个数据表
    // db->insert_record("user", "id=’210001’ , name=’liming’ , math=90,  cs=92.5, english=87")
    void insert_record(std::string table_name, std::string fields);

    // 从数据表中删除记录
    // db->delete_record("user")
    // db->delete_record("user", "math<60")
    void delete_record(std::string table_name, std::string filter = "all");

    // 从数据表中选择记录
    // db->select_record("user", "*", "math<60")
    // db->select_record("user", "id, name, math", "math<60 and english<60", "math desc")
    void select_record(std::string table_name, std::string show_fields, std::string filters, std::string order = "none");
};
